let validate = {
    //身份证验证
    isIDcard: (str) => {
        return /^[1-9]\d{5}(18|19|20|(3\d))\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/.test(str);
    },
    // 车牌验证
    isLicensePlate: (str) => {
        // return /^(([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z](([0-9]{5}[DF])|([DF]([A-HJ-NP-Z0-9])[0-9]{4})))|([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z][A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳使领]))$/.test(str);
        return /^([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z_0-9]{5}|[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z_0-9]{6})$/.test(str);
        // return /^[A-Z]{2}\d{5}$/.test(str)
    },
    /**
     * 验证是否为整数
     * str：需要验证的值
     * type：验证模式
     * type值为：
     * 1：验证是否为整数且不以0开始
     * 2：验证是否为数字且指定长度,第三参数指定长度
     * 3：验证指定小数位数的正实数,第三参数指定小数位数
     * 4：验证指定小数位数范围的正实数,第三参数、第四参数指定小数位数范围
     */
    isNumber: (str, type = 0, ...params) => {
        let reg;
        switch (type) {
            case 1:
                reg = /^[1-9][0-9]*$/;
                break;
            case 2:
                reg = new RegExp(`^\\d{${params[0]}}$`, 'g');
                break;
            case 3:
                reg = new RegExp(`^[0-9]+(.[0-9]{${params[0]}})?$`);
                break;
            case 4:
                reg = new RegExp(`^[0-9]+(.[0-9]{${params[0]},${params[1]}})?$`);
                break;
            default:
                reg = /^[0-9]*$/;
                break;
        }
        return reg.test(str)
    },
    /**
     * 邮箱验证
     */
    email: str => {
        let reg = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;
        return reg.test(str)
    },
    /**
     * 座机号码验证
     */
    tel: str => {
        let reg = /^\d{3}-\d{8}|\d{4}-\d{7,8}$/;
        return reg.test(str)
    },
    /**
     * 手机号码验证
     */
    phone: str => {
        let reg = /^\d{11}$/;
        return reg.test(str)
    },
    /**
     * 密码验证，默认为弱密码验证
     * type：验证等级
     * type值为
     * 1：弱密码验证，纯数字，纯字母，纯特殊字符
     * 2：中密码验证，字母+数字，字母+特殊字符，数字+特殊字符
     * 3：强密码验证，字母+数字+特殊字符
     * 第三参数为指定长度验证
     * 如果传入了第四参数，则表示要进行长度区间范围验证
     */
    pwd: (str, type = 1, ...params) => {
        let reg, rangeParam = `+`;
        if (params[0] && params[1]) {
            rangeParam = `{${params[0]},${params[1]}}`
        } else if (params[0]) {
            rangeParam = `{${params[0]}}`
        }
        switch (type) {
            case 1:
                reg = new RegExp(`^(?:\\d+|[a-zA-Z]+|[!@#$%^&*]+)${rangeParam}$`);
                break;
            case 2:
                reg = new RegExp(`^(?![a-zA-z]+$)(?!\\d+$)(?![!@#$%^&*]+$)[a-zA-Z\\d!@#$%^&*]${rangeParam}$`);
                break;
            case 3:
                reg = new RegExp(`^(?![a-zA-z]+$)(?!\\d+$)(?![!@#$%^&*]+$)(?![a-zA-z\\d]+$)(?![a-zA-z!@#$%^&*]+$)(?![\\d!@#$%^&*]+$)[a-zA-Z\\d!@#$%^&*]${rangeParam}$`);
                break;
            default:
                return false
        }
        return reg.test(str)
    },
    /**
     * 指定范围区间的长度验证
     * @param str 需要验证的字符串
     * @param start 区间开始值
     * @param end   区间结束值
     */
    lengthValid: (str, start, end) => {
        let len = str.length
        if (len >= start && len <= end) {
            return true
        } else {
            return false
        }
    },
    /**
     * 非空判定
     */
    isNull: str => {
        if (typeof str === "string") {

        }
    },
    /**
     * 中文验证
     * @param str 需要验证的字符串
     * @param type 验证类型
     * type=1：当前字符串全是中文
     * type=0：当前字符串包含中文
     */
    isChineseChar: (str, type = 0) => {
        let reg;
        if (type) {
            reg = new RegExp(`[\u4e00-\u9fa5]{${str.length}}$`);
        } else {
            reg = new RegExp("[\\u4E00-\\u9FFF]+", "g");
        }
        return reg.test(str)
    },
    /**
     * 是否包含数字
     * @param str 需要验证的字符串
     */
    containNumber: (str) => {
        let reg = new RegExp("[\\d]+", "g");
        return reg.test(str)
    },
    /**
     * 英文校验
     * @param str 需要验证的字符串
     * @param type 验证类型
     * type=1：当前字符串全是英文
     * type=0：当前字符串包含英文
     */
    isEnglish: (str, type = 0) => {
        let reg;
        if (type) {
            reg = new RegExp(`[a-zA-Z]{${str.length}}$`);
        } else {
            reg = new RegExp("[a-zA-Z]+", "g");
        }
        return reg.test(str)
    },
    /**
     * 符号校验
     * @param str 需要验证的字符串
     * @param type 验证类型
     * type=1：当前字符串全是符号
     * type=0：当前字符串包含符号
     */
    isSymbol: (str, type = 0) => {
        let reg;
        if (type) {
            reg = new RegExp(`[!@#$%^&*]{${str.length}}$`);
        } else {
            reg = new RegExp("[!@#$%^&*]+", "g");
        }
        return reg.test(str)
    },
    // 校验数据是否为空值
    isEmpty: (val) => {
        if (typeof val == "undefined" || val == null || val == "") {
            return true;
        }
        else {
            return false;
        }
    }
}

export default validate
